競技プログラミングでバグった時のためのチェックリスト: DFS ・ BFS
競技プログラミングでバグった時のためのチェックリスト:DFS・BFS 訪問したことを記述するタイミングは適切か?
FIXED: visitedの書き込みタイミングに誤りがあった。
whileループで取り出した後の頂点の後にvisitedをつける場合、
stackの中に入っているがまだ未訪問の頂点に複数回アクセスできてしまう。
code:diff
stack.push_back(i);
connected_count.push_back(0ll);
while (not stack.empty()) {
const size_t current = stack.back();
stack.pop_back();
connected_count.back()++;
for (const auto& next:adj_listcurrent) { // FIXED: visitedの書き込みタイミングに誤りがあった。
// whileループで取り出した後の頂点の後にvisitedをつける場合、
// stackの中に入っているがまだ未訪問の頂点に複数回アクセスできてしまう。
stack.push_back(next);
}
}
}